// 导出一个axios的实例  而且这个实例要有请求拦截器 响应拦截器
import router from '@/router'
import store from '@/store'
import axios from 'axios'
import { getTokenTimer } from './auth'
const service = axios.create({
  // 1.配置代理服务器 根路径必须写相对路径不能直接写目标服务器地址
  // baseURL:'/api'  带上斜杠 代理服务器会自动拼接当前项目的地址 http://localhost:8888/api/sys/login
  // 使用环境变量来设置全局基础路径 这样项目上线就不用来手动更改了
  baseURL: process.env.VUE_APP_BASE_API // 设置全局基础路径
}) // 创建一个axios的实例

// 检查token是否过期
function checkTokenTime() {
  const timeNow = Date.now()
  // console.log('getTokenTimer', getTokenTimer())
  return (timeNow - getTokenTimer()) / 1000 > 60 * 60
}

// service.interceptors.request.use() // 请求拦截器
service.interceptors.request.use(request => {
  // 所有的请求到达服务器之前都会经过这里
  const token = store.state.user.token
  if (token) {
    // 检查token是否过期
    if (checkTokenTime()) {
      store.commit('user/removeToken')
      router.push('/login')
      return Promise.reject(new Error('身份验证失效了,请重新登录'))
    }
    // 给请求统一添加请求头token
    request.headers.Authorization = `Bearer ${token}`
  }
  return request
}, error => {
  return Promise.reject(error)
})

// service.interceptors.response.use() // 响应拦截器
service.interceptors.response.use(response => {
  // console.log('服务器返回的数据都会经过这里', response)
  if (!response.data.success) {
    return Promise.reject(new Error(response.data.message))
  }
  // 解决数据代码沉余问题
  return response.data
}, error => {
  if (error.response.status === 401 || error.response.data.code === 10002) {
    store.commit('user/removeToken')
    router.push('/login')
  }
  return Promise.reject(error)
})
export default service // 导出axios实例
